package kgame5.k25d.core.group {
	import kgame5.k25d.core.Camera25D;
	import kgame5.k25d.core.Node25D;

	import flash.display.DisplayObject;
	import flash.display.Sprite;

	/**
	 * @author max
	 * 2010-12-14
	 * 抽象的Group25D ，不要直接使用
	 * 注意，Group25D是空的，sprite的x,y是0，与世界重合，这样就是简化处理，不需要Moc*Mow（比如）之类
	 */
	public class Group25D extends Node25D{
		//_____________________Property_________________________
	
	protected var aChild:Array;
	protected var mc:Sprite;
	//______________________Method__________________________
	//注意要想办法禁止这个的实例化
	public function Group25D(){
		super();
		
		aChild=new Array();
		
		mc=new Sprite();
	}
	
	
	override public function getDO():DisplayObject{
		return mc;
	}
	
	//##添加子
	public function addChild(md:Node25D):void{
		
		//1,如果有老的，先从老的里删除
		if(md.getParent()!=null){
			md.getParent().removeChild(md);
		}
		
		//2,设置parent
		md.setParent(this);
		
		//3,逻辑加入到child
		aChild.push(md);
		
		//添加到视图
		(getDO() as Sprite).addChild(md.getDO());
		
		//4,更新边界
		//this.updateAABB();//TODO 暂时不处理
		
		//5,视图加入，这个要子类去做
	}
	
	//##删除
	public function removeChild(md:Node25D):void{
		
		//1,安全检查
		if(md==null){
			return;
		}
		if(containsChild(md)==false){
			return;
		}
		
		//2,逻辑删除.aChild里删除
		for(var i:int=aChild.length-1;i>=0;i--){
			if(aChild[i]==md){
				aChild.splice(i,1);
				(getDO() as Sprite).removeChild(md.getDO());
				break;
			}
		}
		
		//3,更新边界
		//this.updateAABB();
			
		//4,mc删除,由子类去做

	}
	
	public function getChildAt(idx:int):Node25D{
		return aChild[idx];
	}
	
	public function containsChild(aim:Node25D):Boolean{
		return aChild.indexOf(aim)!=-1;
		
	}
	

	
	//##去掉所有子
	public function removeAllChild():void{
		//删除视图
		for each(var node:Node25D in aChild){
			(getDO() as Sprite).removeChild(node.getDO());
		}
		
		//逻辑
		aChild=new Array();
		
		//更新边界
		//this.updateAABB();
		
		//视图
	}
	
	//这个是被外部遍历子用的,dict
	public function getChildren():Array{
		return aChild;
	}
	
	public function getChildCount():int{
		return aChild.length;
	}
	
	override public function update(camera:Camera25D):void{
		throw new Error("这个是允许直接使用的");
	}
	
	
	}
}
